﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MakeIT.Deo.Negocios;
using System.Data.Entity;
using System.IO;

namespace MakeIT.Deo.Apresentacao
{
    public partial class CadastroNoticia : System.Web.UI.Page
    {
        usuario usuarioVO = null;

        protected void Page_Load(object sender, EventArgs e)
        {
                usuarioVO = (usuario)this.Session["userActive"];

            if (!IsPostBack)
            {
                Util.HabilitarCampos(false, this.panelCad);
                Util.HabilitarCampos(false, this.TabPanelFileUpload);
                this.EditorCadNoticia.ActiveMode = AjaxControlToolkit.HTMLEditor.ActiveModeType.Preview;
            }
        }

        /// <summary>
        /// Manipula o evento do bot&atilde;o btnSalvar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {

            //Declara objetos
            noticia noticiaVO = null;
            NoticiaBO noticiaBO = null;
            bool novoRegistro = false;

            try
            {
                if (DateTime.Parse(this.txtCadDtInicio.Text) > DateTime.Parse(this.txtCadDtFim.Text))
                {
                    Util.ExibeAlert(this, "Data inicial MAIOR que data final!");
                    return;
                }

                //Cria objeto
                noticiaBO = new NoticiaBO();

                //Verifica se o ID é nulo, se sim = cadastro novo
                if (string.IsNullOrEmpty(this.txtCadId.Text))
                {
                    noticiaVO = new noticia();
                    noticiaVO.Cadastro = DateTime.Now;
                    noticiaVO.CadastradoPor = usuarioVO.User;

                    novoRegistro = true;
                }
                //Recupera dados para serem alterados
                else
                {
                    //Recupera dados
                    noticiaVO = noticiaBO.RecuperaNoticia(Int32.Parse(this.txtCadId.Text));

                }

                noticiaVO.Titulo = this.txtCadTitulo.Text;
                noticiaVO.Conteudo = this.EditorCadNoticia.Content;
                noticiaVO.DataVigenciaInicio = DateTime.Parse(this.txtCadDtInicio.Text);
                noticiaVO.DataVigenciaFim = DateTime.Parse(this.txtCadDtFim.Text);
                noticiaVO.Status = this.DropDownListStatus.SelectedItem.Value.Equals("true");
                noticiaVO.Edicao = DateTime.Now;
                noticiaVO.EditadoPor = usuarioVO.User;

                //Chama metodo para salvar ou criar novo registro
                noticiaBO.SalvaNoticia(noticiaVO, novoRegistro);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                this.EditorCadNoticia.Content = "";
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";

                // Trava bot&atilde;o de edi&ccedil;&atilde;o
                this.btnEditar.Enabled = false;

                // Trava bot&atilde;o de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o bot&atilde;o salvar
                this.btnSalvar.Enabled = false;

                // Habilida o botao novo
                this.btnNovo.Enabled = true;

                // trava upload de imagem
                this.AsyncFileUpload1.Enabled = false;
                this.btnVisualizarImagem.Enabled = false;

                Util.HabilitarCampos(false, this.panelCad);
                Util.HabilitarCampos(false, this.TabPanelFileUpload);
                this.EditorCadNoticia.ActiveMode = AjaxControlToolkit.HTMLEditor.ActiveModeType.Preview;

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do bot&atilde;o btnPesquisa
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnPesquisa_Click(object sender, EventArgs e)
        {

            //Declara objetos
            int? idNoticia = null;
            string titulo = null;

            try
            {
                if (!string.IsNullOrEmpty(this.txtId.Text))
                {
                    idNoticia = Int32.Parse(this.txtId.Text);
                }

                if (!string.IsNullOrEmpty(this.txtTitulo.Text))
                {
                    titulo = this.txtTitulo.Text;
                }

                //
                this.grvResultado.DataSource = new NoticiaBO().RecuperaNoticia(titulo, idNoticia, false,false);

                //Vincula os dados
                this.grvResultado.DataBind();
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do bot&atilde;o btnCancelar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            this.tabNoticia.ActiveTabIndex = 0;

            // Desabilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(false, this.panelCad);
            Util.HabilitarCampos(false, this.TabPanelFileUpload);
            this.EditorCadNoticia.ActiveMode = AjaxControlToolkit.HTMLEditor.ActiveModeType.Preview;

            // Destrava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = !string.IsNullOrEmpty(this.txtCadId.Text);

            // Detrava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = !string.IsNullOrEmpty(this.txtCadId.Text);

            // Detrava bot&atilde;o de novo
            this.btnNovo.Enabled = true;

            // Desabilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = false;

            // trava upload de imagem
            this.AsyncFileUpload1.Enabled = false;
            this.btnVisualizarImagem.Enabled = !string.IsNullOrEmpty(this.txtCadId.Text);
        }

        protected void grvResultado_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {

                ImageButton imgbExcluir = e.Row.FindControl("imgbExcluir") as ImageButton;

                imgbExcluir.Attributes.Add("onclick", "return confirma_exclusao();");

            }
        }

        protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            NoticiaBO noticiaBO = null;
            noticia noticiaVO = null;
            int idNoticia = 0;

            try
            {
                // cria objeto
                noticiaBO = new NoticiaBO();

                //
                idNoticia = int.Parse(((ImageButton)sender).CommandArgument);

                //
                noticiaVO = noticiaBO.RecuperaNoticia(idNoticia); ;

                this.txtCadId.Text = idNoticia.ToString();
                this.txtCadDtFim.Text = ((DateTime)noticiaVO.DataVigenciaFim).ToString("dd/MM/yyyy");
                this.txtCadDtInicio.Text = noticiaVO.DataVigenciaInicio.ToString("dd/MM/yyyy");
                this.EditorCadNoticia.Content = noticiaVO.Conteudo;
                this.txtCadTitulo.Text = noticiaVO.Titulo; ;
                this.DropDownListStatus.SelectedValue = ( !noticiaVO.Status==null || (bool)noticiaVO.Status?"true":"false");
                this.ltCadastradoPor.Text = noticiaVO.CadastradoPor;
                this.ltEditadoPor.Text = noticiaVO.EditadoPor;
                this.ltDataCadastro.Text = ((DateTime)noticiaVO.Cadastro).ToString();
                this.ltDataEdicao.Text = (noticiaVO.Edicao==null?"":((DateTime)noticiaVO.Edicao).ToString());

                this.LabelIdNoticia.Text = noticiaVO.IdNoticia.ToString();
                this.LabelNoticia.Text = noticiaVO.Titulo;

                //
                this.tabNoticia.ActiveTabIndex = 1;

                //
                Util.HabilitarCampos(false, this.panelCad);
                Util.HabilitarCampos(false, this.TabPanelFileUpload);
                this.EditorCadNoticia.ActiveMode = AjaxControlToolkit.HTMLEditor.ActiveModeType.Preview;

                //
                this.btnSalvar.Enabled = false;

                //
                this.btnEditar.Enabled = true;

                //
                this.btnExcluir.Enabled = true;

                //
                this.btnNovo.Enabled = true;

                // trava upload de imagem
                this.AsyncFileUpload1.Enabled = false;
                this.btnVisualizarImagem.Enabled = true;
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento editar do web form
        /// </summary>
        /// <param name="sender">Objeto disparador de evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnEditar_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(true, this.panelCad);
            Util.HabilitarCampos(true, this.TabPanelFileUpload);
            this.EditorCadNoticia.ActiveMode = AjaxControlToolkit.HTMLEditor.ActiveModeType.Design;

            // Trava apenas o text box do ID
            this.txtCadId.Enabled = false;

            // Trava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = false;

            // Trava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = false;

            // Trava bot&atilde;o de novo
            this.btnNovo.Enabled = false;

            // Habilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = true;

            // Destrava upload de imagem
            this.AsyncFileUpload1.Enabled = true;
            this.btnVisualizarImagem.Enabled = true;

            this.txtCadDtInicio.Focus();

        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            //Limpa formulario, para a entrada de novo registro
            Util.LimparCampos(this.panelCad);
            Util.LimparCampos(this.TabPanelFileUpload);
            this.EditorCadNoticia.Content = "";
            this.ltCadastradoPor.Text = "";
            this.ltEditadoPor.Text = "";
            this.ltDataCadastro.Text = "";
            this.ltDataEdicao.Text = "";

            // Habilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(true, this.panelCad);
            Util.HabilitarCampos(false, this.TabPanelFileUpload);
            this.EditorCadNoticia.ActiveMode = AjaxControlToolkit.HTMLEditor.ActiveModeType.Design;

            // Trava apenas o text box do ID
            this.txtCadId.Enabled = false;

            // Trava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = false;

            // Trava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = false;

            // Trava bot&atilde;o de novo
            this.btnNovo.Enabled = false;

            // Habilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = true;

            // Trava upload de imagem
            this.AsyncFileUpload1.Enabled = false;
            this.btnVisualizarImagem.Enabled = false;

            this.txtCadDtInicio.Focus();

        }

        protected void btnExcluir_Click(object sender, EventArgs e)
        {
            //Declara objetos
            noticia noticiaVO = null;
            NoticiaBO noticiaBO = null;

            try
            {
                //Cria objeto
                noticiaBO = new NoticiaBO();
                noticiaVO = new noticia();

                noticiaVO.IdNoticia = Int32.Parse(this.txtCadId.Text);
                noticiaVO.Titulo = this.txtCadTitulo.Text;
                noticiaVO.Conteudo = this.EditorCadNoticia.Content;
                noticiaVO.DataVigenciaInicio = DateTime.Parse(this.txtCadDtInicio.Text);
                noticiaVO.DataVigenciaFim = DateTime.Parse(this.txtCadDtFim.Text);
                noticiaVO.Status = this.DropDownListStatus.SelectedItem.Value.Equals("true");

                //Chama metodo para salvar ou criar novo registro
                noticiaBO.DeletaNoticia(noticiaVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro excluido com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                Util.LimparCampos(this.TabPanelFileUpload);
                this.EditorCadNoticia.Content = "";
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";


                // Trava bot&atilde;o de edi&ccedil;&atilde;o
                this.btnEditar.Enabled = false;

                // Trava bot&atilde;o de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o bot&atilde;o salvar
                this.btnSalvar.Enabled = false;

                // Habilida o botao novo
                this.btnNovo.Enabled = true;

                // Trava upload de imagem
                this.AsyncFileUpload1.Enabled = false;
                this.btnVisualizarImagem.Enabled = false;

                this.TabPanelFileUpload.Enabled = false;

            }
            catch (Exception ex)
            {

                throw ex;
            }
            
        }

        protected void ProcessUpload(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
        {
            //Recupera dados
            NoticiaBO noticiaBO = new NoticiaBO();
            noticia noticiaVO = noticiaBO.RecuperaNoticia(int.Parse(this.LabelIdNoticia.Text));

            if (noticiaVO == null)
            {
                this.LabelMensagem.Text = "É necess&aacute;rio salvar a Not&iacute;cia antes de fazer Upload de imagem.";
                return;
            }

            // upload da imagem
            if (AsyncFileUpload1.PostedFile.FileName.Length > 0)
            {
                Stream st = AsyncFileUpload1.PostedFile.InputStream;
                byte[] fb = new byte[st.Length];

                fb = AsyncFileUpload1.GetBytesFromStream(st);
                noticiaVO.Mime = AsyncFileUpload1.PostedFile.ContentType;
                // ScriptManager.RegisterClientScriptBlock(AsyncFileUpload1, AsyncFileUpload1.GetType(), "img", "top.document.getElementById('imgUpload').src='image.jpg';", true);

                noticiaVO.Foto = fb;

                this.LabelMensagem.Text = fb.Length + " bytes enviados";
                //this.Image1.ImageUrl = "~/Imagens/DownFamilia.aspx?idFamilia=" + familiaVO.IdFamilia+"&controle="+DateTime.Now.Ticks;
            }

            noticiaVO.Edicao = DateTime.Now;
            noticiaVO.EditadoPor = usuarioVO.User;

            //Chama metodo para salvar ou criar novo registro
            noticiaBO.SalvaNoticia(noticiaVO, false);

        }

        protected void btnVisualizarImagem_Click(object sender, EventArgs e)
        {
            this.Image1.ImageUrl = "~/DownNoticia.aspx?idNoticia=" + this.LabelIdNoticia.Text + "&controle=" + DateTime.Now.Ticks;
        }



    }
}
